/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package jogopoo.Interface;

import java.awt.Container;
import java.io.IOException;
import javax.swing.JFrame;
import jogopoo.Util.Arquivo;

/**
 *
 * @author pererabass
 */
public class Ranking extends JFrame {

    public Ranking() {
        this.carregaRanking();
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.ordenaScores();
        this.setBounds(10, 10, 500, 598);
        this.setTitle("Space Invaders - Ranking");
        this.setResizable(false);
        Container contentPane = this.getContentPane();
        contentPane.add(new RankingPanel(this));
    }
/**
 * Seta o nome do jogador
 * @param nome
 */
    public void setNome(String nome) {
        this.nome = nome;
    }
/**]
 * seta o score do jogador para salvar em arquivo
 * @param score
 */
    public void setScore(int score) {
        this.score = score;
    }
/**
 * retorna o nome do jogador
 * @return nome
 */
    public String getNome() {
        return nome;
    }
/**
 * retorna o score do jogador
 * @return score
 */
    public int getScore() {
        return score;
    }

 /**
  * carrega o arquivo de ranking
  */
    public void carregaRanking() {
        try {
            buffer = Arquivo.carregar("data/rnk.hs");
        } catch (Exception e) {
            e.printStackTrace();
        }

        int i = 0;
        int j = 0;
        while (buffer.charAt(i) != '#') {
            ++i;
        }
        char n[] = new char[i - j];
        buffer.getChars(j, n.length, n, 0);
        ++i;
        j = i;
        nS = Integer.parseInt(String.copyValueOf(n));
        vetor_scores = new String[5];
        vetor_nomes = new String[5];
        for (int k = 0; k < nS; ++k) {

            while (buffer.charAt(i) != '#') {
                ++i;
            }
            char score[] = new char[i - j];
            buffer.getChars(j, j + score.length, score, 0);
            ++i;
            j = i;
            while (buffer.charAt(i) != '#') {
                ++i;
            }
            char nome[] = new char[i - j];// numero de aliens por fileira
            buffer.getChars(j, j + nome.length, nome, 0);
            ++i;
            j = i;

            vetor_scores[k] = String.copyValueOf(score);
            vetor_nomes[k] = String.copyValueOf(nome);
        }
        if (nS < 5) {
            for (int k = nS; k < 5; ++k) {
                vetor_scores[k] = "0";
                vetor_nomes[k] = "---";
            }
        }

    }
/**
 * ordena o vetor de scores
 */
    public void ordenaScores() {
        for (int i = vetor_scores.length; i >= 1; i--) {
            for (int j = 1; j < i; j++) {
                if (Integer.parseInt(vetor_scores[j - 1]) < Integer.parseInt((vetor_scores[j]))) {
                    String auxS = vetor_scores[j];
                    String auxN = vetor_nomes[j];

                    vetor_scores[j] = vetor_scores[j - 1];
                    vetor_scores[j - 1] = auxS;

                    vetor_nomes[j] = vetor_nomes[j - 1];
                    vetor_nomes[j - 1] = auxN;

                }
            }
        }
    }
/**
 * salva o arquivo de ranking
 * @throws IOException
 */
    public void salvarRanking() throws IOException {
        String conteudo = new String();
        conteudo = Integer.toString(nS) + "#";
       for (int i = 0; i < nS; ++i) {
           conteudo = conteudo+vetor_scores[i]+"#"+vetor_nomes[i]+"#";
         }
        System.out.println(conteudo);
        Arquivo.salvar("data/rnk.hs", conteudo, false);
    }
/**
 * retorna o numero de scores
 * @return nS
 */
    int getNS() {
        return nS;
    }
/**
 * retorna o vetor de nomes
 * @return vetor_nomes
 */
    public String[] getVetorNomes() {
        return vetor_nomes;
    }
/**
 * retorna o vetor de scores
 * @return vetor_scores
 */
    public String[] getVetorScores() {
        return vetor_scores;
    }

    /**
     * verifica se o score do jogador entra no ranking
     * retorna falso ou verdadeiro
     */
    public boolean verifica(int score) {
        int i = vetor_scores.length - 1;
        while (score < Integer.parseInt(vetor_scores[i]) && i > 0) {
            --i;
        }
        if (i == 0) {
            return false;
        } else {
            return true;
        }
    }
/**
 * atualiza o ranking e salva os arquivo
 * @throws IOException
 */
    public void atualiza() throws IOException {

        vetor_scores[vetor_scores.length - 1] = Integer.toString(score);
        vetor_nomes[vetor_nomes.length - 1] = nome;
        if (nS < 5) {
            ++nS;
        }
        this.ordenaScores();
        this.repaint();
        this.salvarRanking();
    }

    private String buffer;
    private int nS; //numero de scores
    private String[] vetor_scores;
    private String[] vetor_nomes;
    private String nome;
    private int score;
}
